/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package agentes;

import java.util.ArrayList;

/**
 *
 * @author jeferson
 *
 * Essa classe defini rotinas para os agentes, sendo que essas rotinas podem ser definidas para semana
 * (dia-a-dia) ou ainda finalSemana (lazer)
 */
public class Rotina {

    protected static final int HORAS_PERIODO = 5;
    ArrayList<Compromisso> dia = new ArrayList<Compromisso>();
    int diaUtil = 15;
    int horaInicial = 7;
    int comecoDia = 7;
    int fimDia = 19;

    public Rotina() {
    }

    //o agente tem 15 horas uteis no dia assim ele pode ter varios comprimissos no dia - 5 horas por periodo
    public ArrayList<Compromisso> rotinaAdultoSemana(ArrayList<Localidade> ondeIr) {
        ArrayList<Compromisso> novo = new ArrayList<Compromisso>();
        String rotina = "semana";
        int idade = 30;

        novo = definirCompromissos(ondeIr, "rotina", idade, rotina);

        return novo;
    }

    public ArrayList<Compromisso> rotinaAdultoFimSemana(ArrayList<Localidade> ondeIr) {
        ArrayList<Compromisso> novo = new ArrayList<Compromisso>();
        String rotina = "finalSemana";
        int idade = 30;

        novo = definirCompromissos(ondeIr, "lazer", idade, rotina);

        return novo;
    }

    public ArrayList<Compromisso> rotinaCriancaSemana(ArrayList<Localidade> ondeIr) {
        ArrayList<Compromisso> novo = new ArrayList<Compromisso>();
        String rotina = "semana";
        int idade = 10;

        novo = definirCompromissos(ondeIr, "rotina", idade, rotina);

        return novo;
    }

    public ArrayList<Compromisso> rotinaCriancaFimSemana(ArrayList<Localidade> ondeIr) {
        ArrayList<Compromisso> novo = new ArrayList<Compromisso>();
        String rotina = "finalSemana";
        int idade = 10;

        novo = definirCompromissos(ondeIr, "lazer", idade, rotina);

        return novo;
    }

    public ArrayList<Compromisso> rotinaAdolecenteSemana(ArrayList<Localidade> ondeIr) {
        ArrayList<Compromisso> novo = new ArrayList<Compromisso>();
        String rotina = "semana";
        int idade = 16;

        novo = definirCompromissos(ondeIr, "rotina", idade, rotina);

        return novo;
    }

    public ArrayList<Compromisso> rotinaAdolecenteFimSemana(ArrayList<Localidade> ondeIr) {
        ArrayList<Compromisso> novo = new ArrayList<Compromisso>();
        String rotina = "finalSemana";
        int idade = 16;

        novo = definirCompromissos(ondeIr, "lazer", idade, rotina);

        return novo;
    }

    public ArrayList<Compromisso> rotinaIdosoSemana(ArrayList<Localidade> ondeIr) {
        ArrayList<Compromisso> novo = new ArrayList<Compromisso>();
        String rotina = "semana";
        int idade = 60;

        novo = definirCompromissos(ondeIr, "rotina", idade, rotina);

        return novo;
    }

    public ArrayList<Compromisso> rotinaIdosoFimSemana(ArrayList<Localidade> ondeIr) {
        ArrayList<Compromisso> novo = new ArrayList<Compromisso>();
        String rotina = "finalSemana";
        int idade = 60;

        novo = definirCompromissos(ondeIr, "lazer", idade, rotina);

        return novo;
    }

    /*PARAMETROS: idade-define o tipo do agente, tipo rotina-define se é uma rotina de semana ou fim de semana
     * ondeIr-array com as localidades
     * RETORNO: um array com a rotina pré definida
     */
    private ArrayList<Localidade> gerarRotina(int idade, String tipoRotina, ArrayList<Localidade> ondeIr) {
        ArrayList<Localidade> compromissos = new ArrayList<Localidade>();
        //quebro o array pai em varios outros menores que representam os periodos do dia
        ArrayList<Localidade> manha = rotinaPeriodo("manha", ondeIr);
        ArrayList<Localidade> tarde = rotinaPeriodo("tarde", ondeIr);
        ArrayList<Localidade> noite = rotinaPeriodo("noite", ondeIr);
        ArrayList<Localidade> festa = rotinaPeriodo("noite", ondeIr);

        if (tipoRotina.equals("semana")) {
            //quebro o array em localidades rotineiras
            manha = lazerRotina("rotina", manha);
            tarde = lazerRotina("rotina", tarde);
            noite = lazerRotina("rotina", noite);
            festa = lazerRotina("lazer", festa);

            //refino o arrays por idades
            manha = idadeRotina(idade, manha);
            tarde = idadeRotina(idade, tarde);
            noite = idadeRotina(idade, noite);
            festa = idadeRotina(idade, festa);

            //montar lista de compromisso
            for (int i = 0; i < manha.size(); i++) {
                boolean existe = false;
                for (int j = 0; j < compromissos.size(); j++) {
                    if (compromissos.get(j).getNomeLocalidade().equals(manha.get(i).getNomeLocalidade())) {
                        existe = true;
                        break;
                    }
                }
                if (existe == false) {
                    Localidade lugar = new Localidade();
                    lugar.setIdLocalidade(manha.get(i).getIdLocalidade());
                    lugar.setNomeLocalidade(manha.get(i).getNomeLocalidade());
                    lugar.setIndicacao(manha.get(i).getIndicacao());
                    lugar.setMatriz(manha.get(i).getMatriz());
                    lugar.setMaxHoras(manha.get(i).getMaxHoras());
                    lugar.setNumeroMaxPessoas(manha.get(i).getNumeroMaxPessoas());
                    lugar.setPeriodo(manha.get(i).getPeriodo());
                    lugar.setPossicaoX(manha.get(i).getPossicaoX());
                    lugar.setPossicaoY(manha.get(i).getPossicaoY());
                    lugar.setTipoAtividade(manha.get(i).getTipoAtividade());
                    compromissos.add(lugar);
                }
            }
            for (int i = 0; i < tarde.size(); i++) {
                boolean existe = false;
                for (int j = 0; j < compromissos.size(); j++) {
                    if (compromissos.get(j).getNomeLocalidade().equals(tarde.get(i).getNomeLocalidade())) {
                        existe = true;
                        break;
                    }
                }
                if (existe == false) {
                    Localidade lugar = new Localidade();
                    lugar.setIdLocalidade(tarde.get(i).getIdLocalidade());
                    lugar.setNomeLocalidade(tarde.get(i).getNomeLocalidade());
                    lugar.setIndicacao(tarde.get(i).getIndicacao());
                    lugar.setMatriz(tarde.get(i).getMatriz());
                    lugar.setMaxHoras(tarde.get(i).getMaxHoras());
                    lugar.setNumeroMaxPessoas(tarde.get(i).getNumeroMaxPessoas());
                    lugar.setPeriodo(tarde.get(i).getPeriodo());
                    lugar.setPossicaoX(tarde.get(i).getPossicaoX());
                    lugar.setPossicaoY(tarde.get(i).getPossicaoY());
                    lugar.setTipoAtividade(tarde.get(i).getTipoAtividade());
                    compromissos.add(lugar);
                }
            }
            for (int i = 0; i < noite.size(); i++) {
                boolean existe = false;
                for (int j = 0; j < compromissos.size(); j++) {
                    if (compromissos.get(j).getNomeLocalidade().equals(noite.get(i).getNomeLocalidade())) {
                        existe = true;
                        break;
                    }
                }
                if (existe == false) {
                    Localidade lugar = new Localidade();
                    lugar.setIdLocalidade(noite.get(i).getIdLocalidade());
                    lugar.setNomeLocalidade(noite.get(i).getNomeLocalidade());
                    lugar.setIndicacao(noite.get(i).getIndicacao());
                    lugar.setMatriz(noite.get(i).getMatriz());
                    lugar.setMaxHoras(noite.get(i).getMaxHoras());
                    lugar.setNumeroMaxPessoas(noite.get(i).getNumeroMaxPessoas());
                    lugar.setPeriodo(noite.get(i).getPeriodo());
                    lugar.setPossicaoX(noite.get(i).getPossicaoX());
                    lugar.setPossicaoY(noite.get(i).getPossicaoY());
                    lugar.setTipoAtividade(noite.get(i).getTipoAtividade());
                    compromissos.add(lugar);
                }
            }
            for (int i = 0; i < festa.size(); i++) {
                boolean existe = false;
                for (int j = 0; j < compromissos.size(); j++) {
                    if (compromissos.get(j).getNomeLocalidade().equals(festa.get(i).getNomeLocalidade())) {
                        existe = true;
                        break;
                    }
                }
                if (existe == false) {
                    Localidade lugar = new Localidade();
                    lugar.setIdLocalidade(festa.get(i).getIdLocalidade());
                    lugar.setNomeLocalidade(festa.get(i).getNomeLocalidade());
                    lugar.setIndicacao(festa.get(i).getIndicacao());
                    lugar.setMatriz(festa.get(i).getMatriz());
                    lugar.setMaxHoras(festa.get(i).getMaxHoras());
                    lugar.setNumeroMaxPessoas(festa.get(i).getNumeroMaxPessoas());
                    lugar.setPeriodo(festa.get(i).getPeriodo());
                    lugar.setPossicaoX(festa.get(i).getPossicaoX());
                    lugar.setPossicaoY(festa.get(i).getPossicaoY());
                    lugar.setTipoAtividade(festa.get(i).getTipoAtividade());
                    compromissos.add(lugar);
                }
            }
        }
        if (tipoRotina.equals("finalSemana")) {
            //quebro o array em localidedes legias
            manha = lazerRotina("lazer", manha);
            tarde = lazerRotina("lazer", tarde);
            noite = lazerRotina("lazer", noite);

            //refino o arrays por idades
            manha = idadeRotina(idade, manha);
            tarde = idadeRotina(idade, tarde);
            noite = idadeRotina(idade, noite);

            //montar lista de compromisso
            for (int i = 0; i < manha.size(); i++) {
                boolean existe = false;
                for (int j = 0; j < compromissos.size(); j++) {
                    if (compromissos.get(j).getNomeLocalidade().equals(manha.get(i).getNomeLocalidade())) {
                        existe = true;
                        break;
                    }
                }
                if (existe == false) {
                    Localidade lugar = new Localidade();
                    lugar.setIdLocalidade(manha.get(i).getIdLocalidade());
                    lugar.setNomeLocalidade(manha.get(i).getNomeLocalidade());
                    lugar.setIndicacao(manha.get(i).getIndicacao());
                    lugar.setMatriz(manha.get(i).getMatriz());
                    lugar.setMaxHoras(manha.get(i).getMaxHoras());
                    lugar.setNumeroMaxPessoas(manha.get(i).getNumeroMaxPessoas());
                    lugar.setPeriodo(manha.get(i).getPeriodo());
                    lugar.setPossicaoX(manha.get(i).getPossicaoX());
                    lugar.setPossicaoY(manha.get(i).getPossicaoY());
                    lugar.setTipoAtividade(manha.get(i).getTipoAtividade());
                    compromissos.add(lugar);
                }
            }
            for (int i = 0; i < tarde.size(); i++) {
                boolean existe = false;
                for (int j = 0; j < compromissos.size(); j++) {
                    if (compromissos.get(j).getNomeLocalidade().equals(tarde.get(i).getNomeLocalidade())) {
                        existe = true;
                        break;
                    }
                }
                if (existe == false) {
                    Localidade lugar = new Localidade();
                    lugar.setIdLocalidade(tarde.get(i).getIdLocalidade());
                    lugar.setNomeLocalidade(tarde.get(i).getNomeLocalidade());
                    lugar.setIndicacao(tarde.get(i).getIndicacao());
                    lugar.setMatriz(tarde.get(i).getMatriz());
                    lugar.setMaxHoras(tarde.get(i).getMaxHoras());
                    lugar.setNumeroMaxPessoas(tarde.get(i).getNumeroMaxPessoas());
                    lugar.setPeriodo(tarde.get(i).getPeriodo());
                    lugar.setPossicaoX(tarde.get(i).getPossicaoX());
                    lugar.setPossicaoY(tarde.get(i).getPossicaoY());
                    lugar.setTipoAtividade(tarde.get(i).getTipoAtividade());
                    compromissos.add(lugar);
                }
            }
            for (int i = 0; i < noite.size(); i++) {
                boolean existe = false;
                for (int j = 0; j < compromissos.size(); j++) {
                    if (compromissos.get(j).getNomeLocalidade().equals(noite.get(i).getNomeLocalidade())) {
                        existe = true;
                        break;
                    }
                }
                if (existe == false) {
                    Localidade lugar = new Localidade();
                    lugar.setIdLocalidade(noite.get(i).getIdLocalidade());
                    lugar.setNomeLocalidade(noite.get(i).getNomeLocalidade());
                    lugar.setIndicacao(noite.get(i).getIndicacao());
                    lugar.setMatriz(noite.get(i).getMatriz());
                    lugar.setMaxHoras(noite.get(i).getMaxHoras());
                    lugar.setNumeroMaxPessoas(noite.get(i).getNumeroMaxPessoas());
                    lugar.setPeriodo(noite.get(i).getPeriodo());
                    lugar.setPossicaoX(noite.get(i).getPossicaoX());
                    lugar.setPossicaoY(noite.get(i).getPossicaoY());
                    lugar.setTipoAtividade(noite.get(i).getTipoAtividade());
                    compromissos.add(lugar);
                }
            }
        }

        return compromissos;
    }

    /*
     * Gera um array baseado no perido: manha, tarde e noite
     * PARAMETROS: periodo indica que parte do dia se deseja classificar
     * RETORNO: array com as localidades ordenas por periodos
     */
    private ArrayList<Localidade> rotinaPeriodo(String periodo, ArrayList<Localidade> ondeIr) {
        ArrayList<Localidade> array = new ArrayList<Localidade>();

        for (int i = 0; i < ondeIr.size(); i++) {
            //ve se existe uma localidade que funcione no periodo informado
            if (ondeIr.get(i).getPeriodo().equals(periodo) || ondeIr.get(i).getPeriodo().equals("full")) {
                //se existir veja se ela esta na lista de localidade
                boolean localidadeExiste = false;
                for (int j = 0; j < array.size(); j++) {
                    if (ondeIr.get(i).getNomeLocalidade().equals(array.get(j).getNomeLocalidade())) {
                        localidadeExiste = true;
                        break;
                    }
                }
                //se a localidade não existe então armazena
                if (localidadeExiste == false) {
                    array.add(ondeIr.get(i));
                }
            }
        }

        return array;
    }

    /*
     * Gera um array baseado no tipo de rotina: semana ou fim de semana
     * PARAMETROS: tipo - indica se é semana ou fim de semana
     * RETORNO: array com as localidades pelo tipo passado
     */
    private ArrayList<Localidade> lazerRotina(String tipo, ArrayList<Localidade> ondeIr) {
        ArrayList<Localidade> array = new ArrayList<Localidade>();

        for (int i = 0; i < ondeIr.size(); i++) {
            //verifica se a localidade é um lugar de rotina ou de lazer
            if (ondeIr.get(i).getTipoAtividade().equals(tipo)) {
                //se existir veja se ela esta na lista de localidade
                boolean localidadeExiste = false;
                for (int j = 0; j < array.size(); j++) {
                    if (ondeIr.get(i).getNomeLocalidade().equals(array.get(j).getNomeLocalidade())) {
                        localidadeExiste = true;
                        break;
                    }
                }
                //se a localidade não existe então armazena
                if (localidadeExiste == false) {
                    array.add(ondeIr.get(i));
                }
            }
        }
        return array;
    }

    /*
     * Gera um array baseado na idade do agente
     * PARAMETROS: idade-indica o grupo de pessoa que o agente pertence
     * RETORNO: array com as localidades de acordo com a indicação para cada idade
     */
    private ArrayList<Localidade> idadeRotina(int idade, ArrayList<Localidade> ondeIr) {
        ArrayList<Localidade> array = new ArrayList<Localidade>();

        //adulto
        if (idade == 30) {
            for (int i = 0; i < ondeIr.size(); i++) {
                //verifica se a localidade é indicada para o agente
                //mais detalhes da indicação verificar classe LocalidadesSistema
                if ((ondeIr.get(i).getIndicacao() == 0) || (ondeIr.get(i).getIndicacao() == 1) || (ondeIr.get(i).getIndicacao() == 5)) {
                    //ver se existe na lista de localidade
                    boolean localidadeExiste = false;
                    for (int j = 0; j < array.size(); j++) {
                        if (ondeIr.get(i).getNomeLocalidade().equals(array.get(j).getNomeLocalidade())) {
                            localidadeExiste = true;
                            break;
                        }
                    }
                    //se a localidade não existe então armazena
                    if (localidadeExiste == false) {
                        array.add(ondeIr.get(i));
                    }
                }
            }
        }
        //criança
        if (idade == 10) {
            for (int i = 0; i < ondeIr.size(); i++) {
                //verifica se a localidade é indicada para o agente
                //mais detalhes da indicação verificar classe LocalidadesSistema
                if ((ondeIr.get(i).getIndicacao() == 0) || (ondeIr.get(i).getIndicacao() == 2) || (ondeIr.get(i).getIndicacao() == 3)) {
                    //ver se existe na lista de localidade
                    boolean localidadeExiste = false;
                    for (int j = 0; j < array.size(); j++) {
                        if (ondeIr.get(i).getNomeLocalidade().equals(array.get(j).getNomeLocalidade())) {
                            localidadeExiste = true;
                            break;
                        }
                    }
                    //se a localidade não existe então armazena
                    if (localidadeExiste == false) {
                        array.add(ondeIr.get(i));
                    }
                }
            }
        }
        //adolecente
        if (idade == 16) {
            for (int i = 0; i < ondeIr.size(); i++) {
                //verifica se a localidade é indicada para o agente
                //mais detalhes da indicação verificar classe LocalidadesSistema
                if ((ondeIr.get(i).getIndicacao() == 0) || (ondeIr.get(i).getIndicacao() == 1) || (ondeIr.get(i).getIndicacao() == 2) || (ondeIr.get(i).getIndicacao() == 6)) {
                    //ver se existe na lista de localidade
                    boolean localidadeExiste = false;
                    for (int j = 0; j < array.size(); j++) {
                        if (ondeIr.get(i).getNomeLocalidade().equals(array.get(j).getNomeLocalidade())) {
                            localidadeExiste = true;
                            break;
                        }
                    }
                    //se a localidade não existe então armazena
                    if (localidadeExiste == false) {
                        array.add(ondeIr.get(i));
                    }
                }
            }
        }
        //idoso
        if (idade == 60) {
            for (int i = 0; i < ondeIr.size(); i++) {
                //verifica se a localidade é indicada para o agente
                //mais detalhes da indicação verificar classe LocalidadesSistema
                if ((ondeIr.get(i).getIndicacao() == 0) || (ondeIr.get(i).getIndicacao() == 4)) {
                    //ver se existe na lista de localidade
                    boolean localidadeExiste = false;
                    for (int j = 0; j < array.size(); j++) {
                        if (ondeIr.get(i).getNomeLocalidade().equals(array.get(j).getNomeLocalidade())) {
                            localidadeExiste = true;
                            break;
                        }
                    }
                    //se a localidade não existe então armazena
                    if (localidadeExiste == false) {
                        array.add(ondeIr.get(i));
                    }
                }
            }
        }

        return array;
    }

    public ArrayList<Compromisso> definirCompromissos(ArrayList<Localidade> ondeIr, String tipoRotina, int idade, String rotina) {
        ArrayList<Compromisso> novo = new ArrayList<Compromisso>();
        //gera um dia de semana para um adulto
        //fitra por periodo do dia
        ArrayList<Localidade> localidades = new ArrayList<Localidade>();
        ArrayList<Localidade> manha = new ArrayList<Localidade>();
        ArrayList<Localidade> tarde = new ArrayList<Localidade>();
        ArrayList<Localidade> noite = new ArrayList<Localidade>();

        localidades = gerarRotina(idade, rotina, ondeIr);
        manha = rotinaPeriodo("manha", localidades);
        tarde = rotinaPeriodo("tarde", localidades);
        noite = rotinaPeriodo("noite", localidades);

        //filtra por atividade de rotina ou lazer
        manha = lazerRotina(tipoRotina, manha);
        tarde = lazerRotina(tipoRotina, tarde);
        noite = lazerRotina(tipoRotina, noite);

        //fitra por atividade indicada a idade da pessoa
        manha = idadeRotina(idade, manha);
        tarde = idadeRotina(idade, tarde);
        noite = idadeRotina(idade, noite);

        //seleciona as atividades que cabem no periodo de 5 horas
        manha = gerarAgenda(manha);
        tarde = gerarAgenda(tarde);
        noite = gerarAgenda(noite);

        //calculo das horas gasta
        int horasManha = 0, horasTarde = 0, horasNoite = 0, horasUsadas = 7;
        for (int i = 0; i < manha.size(); i++) {
            horasManha = horasManha + manha.get(i).getMaxHoras();
            Compromisso compro = new Compromisso();
            compro.setHoraInicial(horasUsadas);
            compro.setHoraFinal(horasUsadas + manha.get(i).getMaxHoras());
            compro.setNomeLocalidade(manha.get(i).getNomeLocalidade());
            compro.setPeriodo(manha.get(i).getPeriodo());
            compro.calcHorasTotal();
            horasUsadas = horasUsadas + manha.get(i).getMaxHoras();
            novo.add(compro);
        }
        if (horasManha < 5) {
            Compromisso compro = new Compromisso();
            compro.setHoraInicial(horasUsadas);
            compro.setHoraFinal(horasUsadas + (5 - horasManha));
            compro.setNomeLocalidade("casa");
            compro.setPeriodo("manha");
            compro.calcHorasTotal();
            horasUsadas = horasUsadas + (5 - horasManha);
            novo.add(compro);
        }
        for (int i = 0; i < tarde.size(); i++) {
            horasTarde = horasTarde + tarde.get(i).getMaxHoras();
            Compromisso compro = new Compromisso();
            compro.setHoraInicial(horasUsadas);
            compro.setHoraFinal(horasUsadas + tarde.get(i).getMaxHoras());
            compro.setNomeLocalidade(tarde.get(i).getNomeLocalidade());
            compro.setPeriodo(tarde.get(i).getPeriodo());
            compro.calcHorasTotal();
            horasUsadas = horasUsadas + tarde.get(i).getMaxHoras();
            novo.add(compro);
        }
        if (horasTarde < 5) {
            Compromisso compro = new Compromisso();
            compro.setHoraInicial(horasUsadas);
            compro.setHoraFinal(horasUsadas + (5 - horasTarde));
            compro.setNomeLocalidade("casa");
            compro.setPeriodo("tarde");
            compro.calcHorasTotal();
            horasUsadas = horasUsadas + (5 - horasTarde);
            novo.add(compro);
        }
        for (int i = 0; i < noite.size(); i++) {
            horasNoite = horasNoite + noite.get(i).getMaxHoras();
            Compromisso compro = new Compromisso();
            compro.setHoraInicial(horasUsadas);
            compro.setHoraFinal(horasUsadas + noite.get(i).getMaxHoras());
            compro.setNomeLocalidade(noite.get(i).getNomeLocalidade());
            compro.setPeriodo(noite.get(i).getPeriodo());
            compro.calcHorasTotal();
            horasUsadas = horasUsadas + noite.get(i).getMaxHoras();
            novo.add(compro);
        }
        Compromisso compro = new Compromisso();
        compro.setHoraInicial(horasUsadas);
        compro.setHoraFinal((horasUsadas + (5 - horasNoite)) + 9);
        compro.setNomeLocalidade("casa");
        compro.setPeriodo("noite");
        compro.calcHorasTotal();
        //horasUsadas = horasUsadas+(5 - horasNoite);
        novo.add(compro);

        return novo;
    }

    public ArrayList<Localidade> gerarAgenda(ArrayList<Localidade> ondeIr) {
        ArrayList<Localidade> novo = new ArrayList<Localidade>();
        ArrayList<Integer> numeros = new ArrayList<Integer>();
        int randomico;

        int contHoras = 0;
        int index = ondeIr.size();//pega o indice maximo do vetor

        boolean existeNumero = false;
        do {
            //rode até um indice que não foi
            do {
                existeNumero = false;
                randomico = (int) (0 + (Math.random() * index));
                for (int i = 0; i < numeros.size(); i++) {
                    if (randomico == numeros.get(i)) {
                        existeNumero = true;
                        break;
                    }
                }
            } while (existeNumero == true);
            numeros.add(randomico);
            ondeIr.get(randomico).setUsado(true);

            boolean existe = false;

            //ve se o comprimisso ja existe me novo
            for (int i = 0; i < novo.size(); i++) {
                if (novo.get(i).getNomeLocalidade().equals(ondeIr.get(randomico).getNomeLocalidade())) {
                    existe = true;
                    break;
                }
            }
            //se não existir adiciona apenas se a atividade não utrapaçar o numero de horas do periodo
            if (existe == false) {
                if (contHoras < 5 && (contHoras + ondeIr.get(randomico).getMaxHoras()) <= 5) {
                    novo.add(ondeIr.get(randomico));
                    contHoras = contHoras + ondeIr.get(randomico).getMaxHoras();
                }
            }
            //verifica se tem mais uma ativida que caiba no tempo do periodo
            boolean temMaisUm = false;
            for (int i = 0; i < ondeIr.size(); i++) {
                if (ondeIr.get(i).getMaxHoras() + contHoras <= 5 && ondeIr.get(i).isUsado() == false) {
                    temMaisUm = true;
                    break;
                }
            }
            //se não completou o tempo com atividade e não tem mais atividades sai
            if (temMaisUm == false) {
                break;
            }

        } while (contHoras <= 5);

        return novo;
    }

    public void imprimirRotina(ArrayList<Compromisso> teste) {
        for (int i = 0; i < teste.size(); i++) {
            System.out.println("comprimisso " + i);
            System.out.println("lugar: " + teste.get(i).getNomeLocalidade() + "");
            System.out.println("periodo: " + teste.get(i).getPeriodo() + "");
            if (teste.get(i).getHoraFinal() < 24) {
                System.out.println("hora incial: " + (teste.get(i).getHoraInicial()) + "");
                System.out.println("hora final: " + (teste.get(i).getHoraFinal()) + "");
            } else {
                System.out.println("hora incial: " + (teste.get(i).getHoraInicial()) + "");
                System.out.println("hora final: " + (teste.get(i).getHoraFinal() - 24) + "");
            }
            System.out.println("total de horas: " + teste.get(i).getTotalHorasAtividade() + "");
            System.out.println("\n");
        }
    }
}
